const express = require('express')
const fs = require('fs');
const path = require('path');
const mongoose = require('mongoose');
mongoose.set('strictQuery', false);

mongoose.connect('mongodb://127.0.0.1/test4');

const NewsModel = mongoose.model('News', {id: Number, title: String, time: String, viewCount: Number}, 'news');

const app = express()
const port = 3000

/*
* 配置 模板引擎
*
* */
// view engine setup
app.engine('html', require('express-art-template'));
app.set('view options', {
    debug: process.env.NODE_ENV !== 'production'
});
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'html');

/*
* 代表以get方式请求 / 返回 send 方法里面的内容
* */
let html = '';

app.get('/', (req, res) => {
    // html = fs.readFileSync('./views/index.html', 'utf-8');
    // res.send(html)

    res.render('index.html');
})

app.get('/about', (req, res) => {
    // html = fs.readFileSync('./views/about.html', 'utf-8');
    // res.send(html)

    res.render('about.html');

})
/*
* 1. express 可以做网页开发
* 2. 接口开发
*
* 数据库 动态类型的网站
*
* */
app.get('/api/v1/news', (req, res) => {

    const newsList = [
        {
            id: 12,
            title: '我是新闻',
            time: '2022年12月29日10:38:14',
            viewCount: 1000,
        },
        {
            id: 22,
            title: '我是新闻24',
            time: '2022年12月19日10:28:14',
            viewCount: 1000,
        },
        {
            id: 32,
            title: '我是新闻32',
            time: '2022年11月19日12:38:14',
            viewCount: 1000,
        }
    ]
    res.setHeader('Content-Type', 'application/json');
    const returnData = {
        statusCode: 0,
        msg: '新闻列表返回成功',
        data: {
            list: newsList,
        }
    }
    res.send(JSON.stringify(returnData));
})

/*
* 1. 通过编程的方式去数据库里面获取数据信息
* 2. 后期则需要开发一个后台进行数据的管理操作（cms系统 内容管理系统），例如进行数据的添加，更新，删除等
*
* */
app.get('/api/v1/dbnews', async (req, res) => {

    let result = await NewsModel.find();

    res.setHeader('Content-Type', 'application/json');
    const returnData = {
        statusCode: 0,
        msg: '新闻列表返回成功',
        data: {
            list: result,
        }
    }
    res.send(JSON.stringify(returnData));
})


app.get('/news', (req, res) => {

    // 1. 实际新闻的内容应该是数据返回的。如果学习了数据库，则可以从数据取内容
    // 2. 由于现在返回的内容是 html代码，是一个普通的网页
    // 如果返回的是一个json格式的数据，则这个就是接口开发。
    const newsList = [
        {
            id: 12,
            title: '我是新闻',
            time: '2022年12月29日10:38:14',
            viewCount: 1000,
        },
        {
            id: 22,
            title: '我是新闻24',
            time: '2022年12月19日10:28:14',
            viewCount: 1000,
        },
        {
            id: 32,
            title: '我是新闻32',
            time: '2022年11月19日12:38:14',
            viewCount: 1000,
        }
    ]
    /*
    * 如果需要把页面和内容整合到一起，则需要使用一个叫做模板引擎的技术
    *
    * */
    // html = fs.readFileSync('./views/news.html', 'utf-8');
    // res.send(html)
    res.render('news.html', {newsList: newsList});
})

app.use(function (req, res) {
    html = fs.readFileSync('./views/notfound.html', 'utf-8');
    res.status(404).send(html)
})

app.listen(port, () => {
    console.log(`app listening on port ${port}`)
})
